﻿using System;
using System.Text;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Globalization;
using AudiPyme.BLL;
using System.IO;
using System.Data;
using AudiPyme.DAL;

namespace AudiPyme.UI
{
    public partial class AdTblCriterios : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!this.IsPostBack)
            {
                LlenaGridView();
            }
        }

        protected void GVCriterios_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            this.GVCriterios.PageIndex = e.NewPageIndex;
            //Si hubiera una fila seleccionada para editar la deseleccionamos
            GVCriterios.EditIndex = -1;
            LlenaGridView();
        }

        protected void LlenaGridView()
        {
            try
            {
                ModeloContainer agenteBD = new ModeloContainer();
                //Se recogen los criterios de riesgo disponibles en la base de conocimiento
                List<CriteriosRiesgo> CritRiesg = CriteriosRiesgoFactory.RecogeCriteriosRiesgo();
                if (CritRiesg.Count() == 0)
                {
                    MuestraMensaje("No hay Criterios de Riesgo disponibles en la base de conocimiento");
                }
                else
                {
                    GVCriterios.DataSource = CritRiesg;
                    GVCriterios.DataBind();
                }
            }
            catch (Exception e)
            {
                e.ToString();
                MuestraMensaje("Error al actualizar los valores de la tabla");
            }
        }

        protected void GVCriterios_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
        {
            //Deseleccionamos la fila
            GVCriterios.EditIndex = -1;
            LlenaGridView();
        }

        protected void GVCriterios_RowEditing(object sender, GridViewEditEventArgs e)
        {
            //Seleccionamos la fila seleccionada
            GVCriterios.EditIndex = e.NewEditIndex;
            LlenaGridView();
        }

        protected void GVCriterios_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
            //Comprobamos que los datos introducidos pasan el validador
            Page.Validate("Validador");
            if (Page.IsValid)
            {
                try
                {
                    //Recogemos la fila seleccionada para editar
                    GridViewRow row = GVCriterios.Rows[e.RowIndex];
                    //Recogemos el TextBox TipoAmenaza de la fila seleccionada
                    TextBox TxtCoste = (TextBox)row.FindControl("TxtTipoAmenaza");
                    //Recogemos el Codigo de la fila seleccionada
                    int IdCriterioRiesgo = int.Parse(row.Cells[0].Text);
                    TextBox TxtCodigo = (TextBox)row.FindControl("TxtCodigo");
                    String Codigo = TxtCodigo.Text;
                    TextBox TxtCriterioRiesgo = (TextBox)row.FindControl("TxtCriterioRiesgo");
                    String CriterioRiesgo = TxtCriterioRiesgo.Text;
                    TextBox TxtDescripcion = (TextBox)row.FindControl("TxtDescripcion");
                    String Descripcion = TxtDescripcion.Text;
                    //Comprobamos que el Codigo no está usado anteriormente
                    if (!CriteriosRiesgoFactory.EstaCodigo(Codigo,IdCriterioRiesgo))
                    {
                        //Actualizamos el Valor del Criterio de Riesgo
                        CriteriosRiesgoFactory.ActualizaCriterioRiesgo(IdCriterioRiesgo, Codigo, CriterioRiesgo, Descripcion);
                        //Deseleccionamos la fila
                        e.Cancel = true;
                        GVCriterios.EditIndex = -1;
                        //Pintamos el GridView para que aparezca el cambio
                        LlenaGridView();
                        MuestraMensaje("El Criterio de Riesgo se ha actualizado correctamente");
                    }
                    else
                    {
                        MuestraMensaje("No se pudo actualizar el Criterio. El Codigo ya esta siendo usado. Elija otro");
                    }
                }
                catch (Exception e1)
                {
                    e1.ToString();
                    MuestraMensaje("Error al actualizar el criterio de riesgo");
                }
            }
            else
            {
                MuestraMensaje("No se pudo actualizar el Criterio. Hay que rellenar todos los campos");
            }
        }

        //Método para mostrar por pantalla un Mensaje de información
        protected void MuestraMensaje(string Mensaje)
        {
            StringBuilder SB = new StringBuilder();
            SB.Append("alert('");
            SB.Append(Mensaje.Replace("\n", "\\n").Replace("\r", "").Replace("'", "\\'"));
            SB.Append("');");
            ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "showalert", SB.ToString(), true);
        }

        protected void GVCriterios_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            //Comprobamos que los datos introducidos pasan el validador
            Page.Validate("Validador");
            if (Page.IsValid)
            {
                try
                {
                    //Recogemos la fila seleccionada para editar
                    GridViewRow row = GVCriterios.Rows[e.RowIndex];
                    //Recogemos el IdCriterioRiesgo de la fila seleccionada
                    int IdCriterioRiesgo = int.Parse(row.Cells[0].Text);
                    //Eliminamos el Criterio de Riesgo y todos los elementos de la BD que dependan de el
                    CriteriosRiesgoFactory.EliminaCriterioRiesgo(IdCriterioRiesgo);
                    MuestraMensaje("Criterio de Riesgo eliminado correctamente");
                    //Actualizamos el GridView con la nueva disposición
                    LlenaGridView();
                }
                catch (Exception e1)
                {
                    e1.ToString();
                    MuestraMensaje("Error al eliminar el criterio");
                }
            }
            else
            {
                MuestraMensaje("No se pudo actualizar el Criterio. Hay que rellenar todos los campos");
            }
        }
    }
}